/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package saltocaballo.entidades;

import java.awt.Component;
import javax.swing.JPanel;

/**
 *
 * @author Martinoxs
 */
public class Tablero extends JPanel{
    
    private JPanel panel;
    private JPanel copiaPanel;
    private int cantFilas;
    private int cantColumnas;
    private Casilla casillaInicio;

    public void setCopiaPanel(JPanel copiaPanel) {
        this.copiaPanel = copiaPanel;
    }

    public JPanel getCopiaPanel() {
        return copiaPanel;
    }
    
    public void setCasillaInicio(Casilla casillaInicio) {
        this.casillaInicio = casillaInicio;
    }

    public Casilla getCasillaInicio() {
        return casillaInicio;
    }
    
    public JPanel getPanel() {
        return panel;
    }

    public Tablero(JPanel panelCasillas) {
        this.panel = panelCasillas;
        int maxFila = 0;
        int maxCol = 0;
        Casilla cas;
        for(Component c: panelCasillas.getComponents()){
            if(c.getClass().equals(Casilla.class)){
                cas = (Casilla) c;
                String[] coords = cas.getCoordenada().split(";");
                if(Integer.parseInt(coords[0]) > maxFila) maxFila = Integer.parseInt(coords[0]);
                if(Integer.parseInt(coords[1]) > maxCol) maxCol = Integer.parseInt(coords[1]);
            }
        }
        setCantFilas(maxFila + 1);
        setCantColumnas(maxCol + 1);
    }

    public final void setCantColumnas(int cantColumnas) {
        this.cantColumnas = cantColumnas;
    }

    public final void setCantFilas(int cantFilas) {
        this.cantFilas = cantFilas;
    }
    
    public int getCantFilas(){
        return cantFilas;
    }
    
    public int getCantColumnas(){
        return cantColumnas;
    }

    public void setTableroCopia(JPanel panelCopia) {
        copiaPanel = panelCopia;
    }

    public JPanel retornarCopiaTablero(){
        JPanel p = new JPanel();
        for(Component c: copiaPanel.getComponents()){
            if (c.getClass().equals(Casilla.class)){
                Casilla cas = (Casilla) c;
                p.add(cas);
            }
        }
        return p;
    }
    
    public boolean tableroResuelto(JPanel panel) {
        JPanel Panel = panel;
        boolean rdo = true;
        for(Component c: Panel.getComponents()){
            if (c.getClass().equals(Casilla.class)){
                Casilla cas = (Casilla) c;
//                System.out.println("        Casilla: " + cas.getCoordenada());
//                System.out.println("        CasillaVisitada: " + cas.fueVisitada());
//                System.out.println("        CasillaCaballo: " + cas.tieneCaballo());
//                System.out.println("        CasillaObstaculo: " + cas.tieneObstaculo());
                if (!cas.fueVisitada() && !cas.tieneObstaculo() && !cas.tieneCaballo()){
                    rdo = false;
                }
            }
        }
        return rdo;
    }

    public void ocuparCasilla(String casillaAnterior) {
        for(Component c: copiaPanel.getComponents()){
            if (c.getClass().equals(Casilla.class)){
                Casilla cas = (Casilla) c;
                if (cas.getCoordenada().equals(casillaAnterior)) {
                    cas.setVisitada(true);
                }
            }
        }
    }
    
    public void desocuparCasilla(String casilla, JPanel panel) {
        for(Component c: panel.getComponents()){
            if (c.getClass().equals(Casilla.class)){
                Casilla cas = (Casilla) c;
                if (cas.getCoordenada().equals(casilla)) {
                    cas.setVisitada(false);
                }
            }
        }
    }

    public void setTieneCaballo(String casilla, boolean opcion) {
        for(Component c: copiaPanel.getComponents()){
            if (c.getClass().equals(Casilla.class)){
                Casilla cas = (Casilla) c;
                if (cas.getCoordenada().equals(casilla)) {
                    cas.setTieneCaballo(opcion);
                }
            }
        }
    }

    public void imprimirEstadoTablero() {
        for(Component c: copiaPanel.getComponents()){
            if (c.getClass().equals(Casilla.class)){
                Casilla cas = (Casilla) c;
                System.out.println("Casilla " + cas.getCoordenada());
                System.out.println("Casilla " + cas.getCoordenada() + ", caballo: " + cas.tieneCaballo());
                System.out.println("Casilla " + cas.getCoordenada() + ", obstaculo: " + cas.tieneObstaculo());
                System.out.println("Casilla " + cas.getCoordenada() + ", ocupada: " + cas.fueVisitada());
            }
        }
    }
}
